package parser.simbolo.operador;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

public class Or extends Operador {

	public Or() {
		super("OR", '|', 3);
		// TODO Apéndice de constructor generado automáticamente
	}

	@Override
	
	public List<String> operar(List<String> subConjA, List<String> subConjB){ 
		Collections.sort(subConjA,this.getComparador());
		Collections.sort(subConjB,this.getComparador());
		Iterator<String> it1= subConjA.iterator();
		Iterator<String> it2= subConjB.iterator();
		List <String> resultado = new ArrayList<String>();
		String uno;
		String dos;
		if(it1.hasNext() && it2.hasNext()){
			uno = it1.next();
			dos = it2.next();
		
			do{			
				//System.out.println("Estoy comparando "+uno+ " y "+dos);
				if(this.getComparador().compare(uno,dos)>=0){
					resultado.add(dos);					
					//Si los 2 son iguales guardo alguno de los 2 y avanzo en ambas
					if(this.getComparador().compare(uno,dos)==0){
						
						//System.out.println("Son iguales "+uno+ " y "+dos);
						if(it1.hasNext()){
							uno =it1.next();
						}else{
							uno=null;
						}	
					}
					//Si solo el uno es mayor
					if(it2.hasNext()){
						dos =it2.next();
					}else{
						dos=null;
					}
										
					
				}else{
					resultado.add(uno);
					if(it1.hasNext()){
						uno =it1.next();
					}else{
						uno=null;
					}
				}
				
			}while(uno!=null && dos!=null);	
			
			if(uno!= null){
				resultado.add(uno);
				
			}
			if(dos!= null){
				resultado.add(dos);
			}
			
			
			
		}
		
		//A esta altura lo sumo a uno solo le quedan elementos
		while(it1.hasNext()) resultado.add(it1.next());
		while(it2.hasNext()) resultado.add(it2.next());
		
		return resultado;
		
		
	}

	

}
